package controller

import (
	"fmt"
	"gin_demo_BubbleList/models"
	"github.com/gin-gonic/gin"
	"net/http"
)

/*
url -> controller -> logic -> model
请求 -> 控制器 -> 业务逻辑 -> 模型层的增删改查
*/
func IndexHandler(c *gin.Context) {
	c.HTML(http.StatusOK, "index.html", nil)
}

func Create(c *gin.Context) {
	//前端页面填写待办事项，点击提交，会发送请求到这
	//1.从请求中把数据拿出来
	var todo models.Todo
	c.BindJSON(&todo)
	fmt.Println(todo)
	//2.存入数据库 + 3.返回响应
	err := models.CreateTodo(&todo)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	} else {
		c.JSON(http.StatusOK, todo)
	}
	//if err = DB.Create(&todo).Error; err != nil {
	//	c.JSON(http.StatusOK, gin.H{
	//		"error": err.Error(),
	//	})
	//} else {
	//	c.JSON(http.StatusOK, todo)
	//}
}

func GetTodoList(c *gin.Context) {
	todoList, err := models.GetTodoList()
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	} else {
		fmt.Println(todoList)
		c.JSON(http.StatusOK, todoList)
	}
	//if err = DB.Find(&todoList).Error; err != nil {
	//	c.JSON(http.StatusOK, gin.H{
	//		"error": err.Error(),
	//	})
	//} else {
	//	fmt.Println(todoList)
	//	c.JSON(http.StatusOK, todoList)
	//}
}

func UpdateById(c *gin.Context) {
	id, ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{
			"error": "无效的id",
		})
		return
	}
	todo, err := models.GetTodoById(id)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
		return
	}
	//var todo Todo
	//if err = DB.Where("id=?", id).First(&todo).Error; err != nil {
	//	c.JSON(http.StatusOK, gin.H{
	//		"error": err.Error(),
	//	})
	//	return
	//}
	c.BindJSON(&todo)
	if err = models.UpdateTodoById(todo); err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	} else {
		c.JSON(http.StatusOK, todo)
	}
}

func DeleteById(c *gin.Context) {
	id, ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{
			"error": "无效的id",
		})
		return
	}
	err := models.DeleteTodo(id)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	} else {
		c.JSON(http.StatusOK, gin.H{
			id: "delete",
		})
	}
	//if err = DB.Where("id=?", id).Delete(Todo{}).Error; err != nil {
	//	c.JSON(http.StatusOK, gin.H{
	//		"error": err.Error(),
	//	})
	//} else {
	//	c.JSON(http.StatusOK, gin.H{
	//		id: "delete",
	//	})
	//}
}
